home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Uip / rcvalert / ttybiff.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  2.3 KB  |  123 lines

  1. /* ttybiff.c: tty alert program using the UDP syntax stuff */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Uip/rcvalert/RCS/ttybiff.c,v 6.0 1991/12/18 20:39:41 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Uip/rcvalert/RCS/ttybiff.c,v 6.0 1991/12/18 20:39:41 jpo Rel $
  9.  *
  10.  * $Log: ttybiff.c,v $
  11.  * Revision 6.0  1991/12/18  20:39:41  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include <stdio.h>
  19. #include <isode/manifest.h>
  20. #include "sys.file.h"
  21. #include <sys/stat.h>
  22. #include <utmp.h>
  23. #include <sys/time.h>
  24. #include <pwd.h>
  25. #include <ctype.h>
  26.  
  27. #include "data.h"
  28.  
  29. char    username[40];
  30. char    hostname[128];
  31. char    homedir[512];
  32. char    *filename = ".alert";
  33. short    port = 0;
  34. char    *extra = "NEW: ";
  35. char    *format = "%extra(%size) %20from %subject << %50body";
  36. int    width = 80;
  37. int    debug = 0;
  38. int    stdoutonly = 0;
  39.  
  40. char    *myname;
  41.  
  42. extern char    *index ();
  43.  
  44. main (argc, argv)
  45. int    argc;
  46. char    *argv[];
  47. {
  48.     extern char    *optarg;
  49.     extern int    optind;
  50.     int    opt;
  51.     int    sd;
  52.  
  53.     myname = argv[0];
  54.     while((opt = getopt(argc, argv, "f:p:u:s")) != EOF)
  55.         switch (opt) {
  56.             case 's':
  57.             stdoutonly = 1;
  58.             break;
  59.             case 'f':
  60.             filename = optarg;
  61.             break;
  62.             case 'p':
  63.             port = atoi(optarg);
  64.             break;
  65.             case 'u':
  66.             (void) strcpy (username, optarg);
  67.             break;
  68.             default:
  69.             fprintf (stderr,
  70.                  "Usage: %s [-f file] [-p port] [-u user]",
  71.                  myname);
  72.             break;
  73.         }
  74.     argc -= optind;
  75.     argv += optind;
  76.  
  77.     init_stuff ();
  78.  
  79.     sd = udp_start (port, filename, homedir);
  80.  
  81.     for (;;) {
  82.         fd_set rfds;
  83.         char    buffer[BUFSIZ];
  84.         char    from[BUFSIZ];
  85.         int    n;
  86.  
  87.         FD_ZERO (&rfds);
  88.         FD_SET (sd, &rfds);
  89.         if(select (sd + 1, &rfds, NULLFD, NULLFD,
  90.                (struct timeval *)0) <= 0)
  91.             continue;
  92.  
  93.         n = sizeof (buffer) - 1;
  94.         if (FD_ISSET (sd, &rfds) &&
  95.             getdata (sd, buffer, &n, username, from)) {
  96.             buffer[n] = 0;
  97.             if (stdoutonly ||
  98.                 (notify_normal (buffer, username) == NOTOK &&
  99.                 isatty (1)))
  100.                 printf ("\n\r%s%c\n\r",
  101.                     buffer, '\007');
  102.         }
  103.     }
  104. }
  105.  
  106. init_stuff ()
  107. {
  108.     struct passwd *pwd;
  109.     char    *cp, *getenv ();
  110.  
  111.     if ((pwd = getpwuid (getuid())) == NULL) {
  112.         fprintf (stderr, "No user name\n");
  113.         exit(-1);
  114.     }
  115.     if (username[0] == NULL)
  116.         (void) strcpy (username, pwd -> pw_name);
  117.  
  118.     if ((cp = getenv ("HOME")) != NULL && *cp)
  119.         (void) strcpy (homedir, cp);
  120.     else
  121.         (void) strcpy (homedir, pwd -> pw_dir);
  122. }
  123.